// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. See the AUTHORS file for names of contributors.

#ifndef STORAGE_LEVELDB_TABLE_BLOCK_H_
#define STORAGE_LEVELDB_TABLE_BLOCK_H_

#include <cstddef>
#include <cstdint>

#include "leveldb/iterator.h"

namespace leveldb
{

    struct BlockContents;
    class Comparator;

    class Block
    {
    public:
        // Initialize the block with the specified contents.
        explicit Block(const BlockContents &contents);

        Block(const Block &) = delete;
        Block &operator=(const Block &) = delete;

        ~Block();

        size_t size() const { return size_; }
        Iterator *NewIterator(const Comparator *comparator);

    private:
        class Iter;

        uint32_t NumRestarts() const;

        const char *data_;
        size_t size_;
        uint32_t restart_offset_; // Offset in data_ of restart array
        bool owned_;              // Block owns data_[]
    };

} // namespace leveldb

#endif // STORAGE_LEVELDB_TABLE_BLOCK_H_
